#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
// 系统调用写数据
//  int main()
//  {
//      umask(0);
//      int fd = open("myfile", O_WRONLY | O_CREAT|O_APPEND, 0644);
//      if (fd < 0)
//      {
//          perror("fd fail");
//          return -1;
//      }

//     printf("%d\n", fd);
//     int count = 5;
//     const char *msg = "hello wgx123\n";
//     while (count--)
//     {
//         if (strlen(msg) == write(fd, msg, strlen(msg)))
//             printf("1\n");
//     }
//     close(fd);
//     return 0;
// }

// 系统调用读
// int main()
// {
//     int fd = open("myfile", O_RDONLY);
//     if (fd < 0)
//     {
//         perror("open fail");
//         return -1;
//     }
//     const char *msg = "hello wgx\n";
//     char buf[1024];
//     while (1)
//     {
//         size_t s = read(fd, buf, strlen(msg));
//         if (s > 0)
//         {
//             buf[s]=0;
//             printf("%s", buf);
//         }
//         else
//             break;
//     }
//     close(fd);
//     return 0;
// }

// 使用write往标准输入里面写
//  int main()
//  {
//  const char*msg="hello wgx\n";
//  char buf[1024];
//  size_t n=read(1,buf,strlen(msg));
//  buf[n]=0;
//  write(1,buf,n);

// return 0;
// }

// int main()
// {
//     char buf[1024];
//    // ssize_t s=read(0,buf,sizeof(buf));
//     char*msg="hello wgx\n";
//     write(1,msg,strlen(msg));

//     // if(s>0)
//     // {
//     //     buf[s]=0;
//     //     write(1,buf,strlen(buf));
//     //     write(2,buf,strlen(buf));
//     // }
//     return 0;
// }

// 查看文件描述符
//  int main()
//  {
//     //  close(0);
//     close(1);
//      //close(2);
//      int fd =open("myfile",O_RDONLY);

//     if(fd<0)
//     {
//         perror("open fail");
//         return -1;
//     }
//     printf("%d\n",fd);
//     return 0;
// }

// 重定向
//  int main()
//  {
//      close(1);
//      int fd=open("myfile",O_WRONLY);
//      if(fd<0)
//      {
//          perror("open fail");
//          return -1;
//      }
//      printf("fd:%d\n",fd);
//      fflush(stdout);
//      return 0;
//  }

// dup2的使用
// int main()
// {
//     int fd = open("./log", O_CREAT | O_RDWR);
//     if (fd < 0)
//     {
//         perror("open fail");
//         return -1;
//     }
//     close(1);
//     dup2(fd, 1);
//     for (;;)
//     {
//         char buf[1024] = {0};
//         ssize_t read_size = read(0, buf, sizeof(buf) - 1);
//         if (read_size < 0)
//         {
//             perror("read fail");
//             break;
//         }
//         printf("%s", buf);
//         fflush(stdout);
//     }
//     return 0;
// }

//探究三种不同的缓存区
//无fflush(stdout)
// int main()
// {
//     umask(0);
//     close(1);
//     int fd=open("log.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
//     if(fd<0)
//     {
//         perror("open fail");
//         return -1;
//     }
//     printf("hello word:%d\n",fd);
//     close(fd);
//     return 0;
// }
//用fflush刷新缓冲区
// int main()
// {
//     umask(0);
//     close(1);
//     int fd=open("log.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
//     if(fd<0)
//     {
//         perror("open fail");
//         return -1;
//     }
//     printf("hello word:%d\n",fd);
//     fflush(stdout);
//     close(fd);
//     return 0;
// }

//重定向到标准错误中
// int main()
// {
//     umask(0);
//     close(2);
//     int fd=open("log.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
//     if(fd<0)
//     {
//         perror("open fail");
//         return -1;
//     }
    
//    perror("hello word\n");
//     close(fd);
//     return 0;
// }

int main()
{
    const char *msg0="hello printf\n";
    const char *msg1="hello fwrite\n";
    const char *msg2="hello write\n";
    printf("%s",msg0);
    fwrite(msg1,sizeof(char),strlen(msg1),stdout);
   // fwrite(msg1,strlen(msg1),1,stdout);
    fflush(stdout);
    write(1,msg2,strlen(msg2));
   
    fork();
    return 0;
}
